﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Web.Models;
using Web;
using Web.Repositories;
using Web.CustomExceptions;
using System.IO;

namespace Web.Controllers
{
    public class CategoriaController : Controller
    {
        CategoriaRepository categoriaRepository = new CategoriaRepository();
        //
        // GET: /CrearCategoria/

        [Authorize]
        public ActionResult EditarView(int idCategoria)
        {
            var model = categoriaRepository.GetCategoria(idCategoria);
            return View(model);
        }

        [Authorize]
        public ActionResult CrearCategoriaView()
        {
            return View();
        }

        [Authorize]
        public ActionResult CrearCategoria()
        {
            string nombre = Request["txtNombre"];
            string descripcion = Request["txtDescripcion"];
            double precio = double.Parse(Request["txtPrecio"]);

             HttpPostedFileBase image = Request.Files[0];    //Hago un request del archivo que se cargo y lo guardo como HttpPostedFileBase.

             if (image.ContentType == "image/jpeg" && image.ContentLength < (2000 * 1000))
             {
                 byte[] foto; //Creo una variable foto como arreglo de bytes.
                 using (var ms = new MemoryStream()) //utilizo una variable ms de tipo Memory Stream para guardar el stream del archivo guardado.
                 {
                     image.InputStream.CopyTo(ms);   //Copio el InputStream del archivo de imagen al MemoryStream.
                     foto = ms.ToArray();            //Paso el MemoryStream a un arreglo de bytes y lo guardo en la variable foto.               
                 }
                 
                 Categoria categoria = new Categoria(nombre, descripcion, precio, foto);
                 categoriaRepository.AltaCategoria(categoria);
             }

            return Redirect(Url.Action("VerCategorias", "Admin"));
        }

        [Authorize]
        public ActionResult Editar(int idCategoria)
        {
            var editar = categoriaRepository.GetCategoria(idCategoria);
            editar.Nombre = Request["txtNombre"];
            editar.Descripcion = Request["txtDescripcion"];
            editar.Precio = double.Parse(Request["txtPrecio"]);

            categoriaRepository.Save();
            return Redirect(Url.Action("VerCategorias", "Admin"));
        }

        [Authorize]
        public ActionResult Eliminar(int idCategoria)
        {
            try
            {
                var baja = categoriaRepository.GetCategoria(idCategoria);
                categoriaRepository.BajaCategoria(baja);
                return Redirect(Url.Action("VerCategorias", "Admin"));
            }
            catch (Exception ex)
            {
                if (ex is ReservaActivaException)
                {
                    return Redirect(Url.Action("Error", "Home", new { error = ex.Message, volver = Url.Action("VerCategorias", "Admin") }));
                }
                return Redirect(Url.Action("Error", "Shared"));
            }
        }

        [Authorize]
        public ActionResult CategoriaError(string error, string volver)
        {
            ViewBag.Error = error;
            ViewBag.Return = volver;
            return View();
        }
    }
}